Апстракција (објектно-оријентисано програмирање)
У програмирању, апстракција се огледа у одабиру параметара приликом моделовања предмета или појмова који су битни за даљу обраду.[1] Конкретније, у објектно-оријентисаном програмирању се односи на могућност да се дата класа прогласи за апстрактну класу.[2]
Објашњење
[уреди | уреди извор]Под апстракцијом се подразмева занемаривање небитних детаља објеката у зависности од потреба.[1] Приликом описивања неког система, апстракција бeлежи само оне његове особине које могу имати значај за даљи рад, тако да се програмер фокусира на мање концепата у току рада.[2][3] Приликом апстраховања, апстракција мора бити добро дефинисана тако да остале апстракције могу бити изведене из ње.[3] У објектно-оријентисаном програмирању, апстракције су најчешће репрезентоване управо класама.[3]
На пример, за програм који бележи учлањење људи у библиотеке, од свих особина сваког члана, потребни су само лични подаци попут имена, адресе и броја личне карте, док остале особине нису од интереса за рад програма.[1] На основу тога се може формирати и задата класа Члан која би имала те податке, са неки својим методама попут УпишиЧлана и слично, у зависности од потреба програма:
class Clan { //Класа члана библиотеке
public:
Clan(strin i, string a, int b) : ime(i), adresa(a), BRLK(b) { upisan = false; } //Конструктор
void upisiClana() { upisan = true; }
void ispisiClana() { upisan = false; }
friend ostream& operator<<(ostream& os, const Clan& c) {
os << c.ime << ' ' << c.adresa << ' ' << c.BRLK;
if (c.upisan)
os << " upisan";
else
os << " nije upisan";
return os;
}
private:
string ime, adresa;
int BRLK;
bool upisan;
};
Изнад је класа написана на програмском језику C++. Дакле, била нам је потребна класа преко које би утврдили који члан је уписан и који су његови подаци. Због тога су нам од интереса били само ти одређени атрибути, што представља апстракцију у овом случају.
Апстракција у објектно-оријентисаним језицима
[уреди | уреди извор]Као што је речено, апстракција се исказује кроз класе које користе готово сви објектно-оријентисани језици. Што се тиче језика попут C++ и Java, апстракција се огледа и кроз могућност стварања апстрактних класа.[1][2] Апстрактне класе су такве да се не могу инстанцирати, односно не могу се стварати објектни који су типа тих класа.[1] Користе се да би се из њих даље могле извести конкретне класе које се могу инстанцирати.[1]
Пример за апстрактне класе би била класа геометријских тела. За апстрактан појам геометријска фигура, нема смисла питати колика јој је површина. Ипак, како постоје разне геометријске фигуре попут правоугаоника и кругова, а њима се може израчунати површина, тада би у конкретној класи геометријских фигура таква метода била проглашена за апстрактном методом (abstract method) или чистом виртуелном методом (pure virtual method). Ово је омогућено у програмским језицима попут C++, па се у свакој изведеној класи та метода наслеђује и може се изменити и поново дефинисати. У програмском језику C++ ово се постиже тако што се у класи да само декларација методе, без дефиниције и на њу дода '= 0', а сама метода је виртуелна са модификатором 'virtual' на почетку декларације.[1][3] Када класа поседује бар једну апстрактну методу, тада је она апстрактна класа.[1][4]
Пример за апстрактну класу у програмском језику C++ би био:
class Osn { //Апстрактна класа
public:
virtual void g(); //Обична виртуелна метода
virtual void f() = 0; //Апстрактна метода
};
Референце
[уреди | уреди извор]- ^ а б в г д ђ е ж Краус, Ласло (2016). Програмски језик С++ са решеним задацима. Београд: Академска мисао. ISBN 978-86-7466-582-4.
- ^ а б в „Summary Of Object-Oriented Programming (OOP) Concepts In Java”. Javajee. Приступљено 28. 1. 2018.
- ^ а б в г Erickson, Carl (2009). Object Oriented Programming (PDF). Atomic Object, LLC. стр. 17. Приступљено 28. 1. 2018.
- ^ „Abstract class”. cppreference. Приступљено 28. 1. 2018.
Литература
[уреди | уреди извор]- Erickson, Carl (2009). Object Oriented Programming (PDF). Atomic Object, LLC. стр. 17. Приступљено 28. 1. 2018.
- Краус, Ласло (2016). Програмски језик С++ са решеним задацима. Београд: Академска мисао. ISBN 978-86-7466-582-4.
- Erickson, Carl (2009). Object Oriented Programming (PDF). Atomic Object, LLC. стр. 17. Приступљено 28. 1. 2018.
- Abelson, Harold; Gerald Jay Sussman; Sussman, Julie (25. 07. 1996). Structure and Interpretation of Computer Programs (2 изд.). MIT Press. ISBN 978-0-262-01153-2. Архивирано из оригинала 26. 02. 2009. г. Приступљено 22. 06. 2012.
- Spolsky, Joel (11. 11. 2002). „The Law of Leaky Abstractions”. Joel on Software.
- Abstraction/information hiding - CS211 course, Cornell University.
- Roberts, Eric S. (1997). Programming Abstractions in C A Second Course in Computer Science.
- Palermo, Jeffrey (29. 07. 2008). „The Onion Architecture”. Jeffrey Palermo.
Спољашње везе
[уреди | уреди извор]- cppreference - Abstract class
- SimArch example of layered architecture for distributed simulation systems.